]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
lookingGlass: Only update window list when visible
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Thu, 12 Sep 2019 18:45:04 +0000 (15:45 -0300)
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Fri, 13 Sep 2019 00:49:38 +0000 (00:49 +0000)
Updating the window list in the Looking Glass is a costly
operation: it destroys a whole lot of actors, and recreates
them. This triggers CSS changes, repaints, and allocations.

It is specially bad when paired with Wayland's big number
of window creations and deletions when showing Builder's
and Epiphany's popup window.

Only update the window list in the Looking Glass when it is
visible.

Related: https://gitlab.gnome.org/GNOME/mutter/issues/556

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/719

js/ui/lookingGlass.js

index 9f692f4aa7e608bc3b9e27bb9f64787a599fcf18..0317973e88f23459282c37711d0fd25f32e22812 100644 (file)
@@ -304,6 +304,9 @@ var WindowList = class WindowList {
     }
 
     _updateWindowList() {
+        if (!this._lookingGlass.isOpen)
+            return;
+
         this.actor.destroy_all_children();
         let windows = global.get_window_actors();
         let tracker = Shell.WindowTracker.get_default();
@@ -335,6 +338,10 @@ var WindowList = class WindowList {
             }
         }
     }
+
+    update() {
+        this._updateWindowList();
+    }
 };
 Signals.addSignalMethods(WindowList.prototype);
 
@@ -1099,6 +1106,8 @@ var LookingGlass = class LookingGlass {
             duration,
             mode: Clutter.AnimationMode.EASE_OUT_QUAD
         });
+
+        this._windowList.update();
     }
 
     close() {
@@ -1124,5 +1133,9 @@ var LookingGlass = class LookingGlass {
             onComplete: () => this.actor.hide()
         });
     }
+
+    get isOpen() {
+        return this._open;
+    }
 };
 Signals.addSignalMethods(LookingGlass.prototype);